
"""
信号槽N对N连接与断开连接
比如一个信号可以关联到多个槽上，多个槽关联到一个信号上。
同时一个信号可以关联到其他信号上。
"""

from PyQt5.QtCore import *


class NNSignal(QObject):
    signal1 = pyqtSignal()     # 定义一个信号（不带参数）
    signal2 = pyqtSignal(int)     # 定义一个信号（带有整数类型的参数）

    def __init__(self):
        super(NNSignal, self).__init__()

        # 将(同一个)信号和（不同）槽进行绑定  另外关联调用规则是：信号按照关联槽的顺序先后调用槽函数
        self.signal1.connect(self.call1)
        self.signal1.connect(self.call11)

        # 触发信号1（让信号触发）
        self.signal1.emit()

        # 将另一个信号也和槽进行绑定
        self.signal2.connect(self.call2)

        # 触发信号2（让信号触发）
        self.signal2.emit(3)

        # 下面我们将信号1和对应的槽解除关联
        self.signal1.disconnect(self.call1)
        self.signal1.disconnect(self.call11)
        self.signal2.disconnect(self.call2)

        # 之后我们重新关联一下
        self.signal1.connect(self.call1)
        self.signal2.connect(self.call2)

        # 重新触发信号
        self.signal1.emit()
        self.signal2.emit(5)
        
    # 首先我们定义两个槽方法
    def call1(self):
        print("call1 emit")

    def call11(self):
        print("call11 emit")

    def call2(self, val):
        print("call2 emit:", val)


if __name__ == '__main__':
    nnsignal = NNSignal()
